// admin/system/handler/sys_post_handler.go
package handler

import (
	"github.com/gin-gonic/gin"
	"go-admin1/admin/system/model"
	"go-admin1/admin/system/service"
	"go-admin1/internal/common/utils"

	"strconv"
)

// SysPostHandler 岗位处理器
type SysPostHandler struct {
	postService service.SysPostService
}

// NewSysPostHandler 创建岗位处理器实例
func NewSysPostHandler(postService service.SysPostService) *SysPostHandler {
	return &SysPostHandler{
		postService: postService,
	}
}

// Create 创建岗位
func (h *SysPostHandler) Create(c *gin.Context) {
	var post model.SysPost
	if err := c.ShouldBindJSON(&post); err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.postService.Create(&post); err != nil {
		utils.FailResponse[string](c, "创建岗位失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "创建岗位成功")
}

// GetByID 根据ID获取岗位
func (h *SysPostHandler) GetByID(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	post, err := h.postService.GetByID(id)
	if err != nil {
		utils.FailResponse[string](c, "该岗位不存在: "+err.Error())
		return
	}
	utils.OkResponse(c, post)
}

// Update 更新岗位
func (h *SysPostHandler) Update(c *gin.Context) {
	var post model.SysPost
	if err := c.ShouldBindJSON(&post); err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.postService.Update(&post); err != nil {
		utils.FailResponse[string](c, "更新岗位失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "更新岗位成功")
}

// Delete 删除岗位
func (h *SysPostHandler) Delete(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.postService.Delete(id); err != nil {
		utils.FailResponse[string](c, "删除岗位失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "删除岗位成功")
}

// List 岗位列表
func (h *SysPostHandler) List(c *gin.Context) {
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))

	posts, total, err := h.postService.List(page, pageSize)
	if err != nil {
		utils.FailResponse[string](c, "获取岗位列表失败: "+err.Error())
		return
	}
	resultData := map[string]interface{}{
		"list":  posts,
		"total": total,
	}
	utils.OkResponse(c, resultData)
}

// ListAll 所有岗位列表
func (h *SysPostHandler) ListAll(c *gin.Context) {
	posts, err := h.postService.ListAll()
	if err != nil {
		utils.FailResponse[string](c, "获取岗位失败: "+err.Error())

		return
	}
	utils.OkResponse(c, posts)
}

// ListByUserID 根据用户ID获取岗位列表
func (h *SysPostHandler) ListByUserID(c *gin.Context) {
	userIDStr := c.Query("userID")
	userID, err := strconv.ParseInt(userIDStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	posts, err := h.postService.ListByUserID(userID)
	if err != nil {
		utils.FailResponse[string](c, "该用户没有岗位: "+err.Error())

		return
	}

	utils.OkResponse(c, posts)
}
